<template>
	<view class="viewport">
		<!-- 导航栏 -->
		<view class="navbar" :style="{ paddingTop: safeAreaInsets?.top + 'px' }">
			<navigator open-type="navigateBack" class="back icon-left" hover-class="none"></navigator>
			<view class="title">个人信息</view>
		</view>
		<!-- 头像 -->
		<view class="avatar">
			<view class="avatar-content" @tap="onAvatarChange">
				<image class="image" :src="formData.avatar " mode="aspectFill" />
				<text class="text">点击修改头像</text>
			</view>
		</view>
		<!-- 表单 -->
		<view class="form">
			<!-- 表单内容 -->
			<view class="form-content">
				<view class="form-item">
					<text class="label">账号</text>
					<text class="account">{{memberStore.userInfo.username}}</text>
				</view>
				<view class="form-item">
					<text class="label">昵称</text>
					<input class="input" type="text" placeholder="请填写昵称" v-model="formData.nickname" />
				</view>
				<view class="form-item">
					<text class="label">性别</text>
					<radio-group @change="onGenderChange">
						<label class="radio">
							<radio value="1" color="#27ba9b" :checked="formData.gender==='1'" />
							男
						</label>
						<label class="radio">
							<radio value="0" color="#27ba9b" :checked="formData.gender==='0'" />
							女
						</label>
					</radio-group>
				</view>
				<view class="form-item">
					<text class="label">生日</text>
					<picker @change="onBirthdayChange" class="picker" mode="date" start="1940-01-01"
						:end="formatDate(new Date())" :value="formData.birthday">
						<view v-if="formData.birthday">{{formData.birthday}}</view>
						<view class="placeholder" v-else>请选择日期</view>
					</picker>
				</view>
				<view class="form-item">
					<text class="label">城市</text>
					<picker @change="onLocationChange" class="picker" mode="region"
						:value="formData.fullLocation?.split(' ')">
						<view v-if="formData.fullLocation">{{formData.fullLocation}}</view>
						<view class="placeholder" v-else>请选择城市</view>
					</picker>

				</view>
				<view class="form-item">
					<text class="label">职业</text>
					<input class="input" type="text" placeholder="请填写职业" v-model="formData.profession" />
				</view>
			</view>
			<!-- 提交按钮 -->
			<button class="form-button" @tap="handleSubmit">保 存</button>
		</view>
	</view>
</template>
<script setup lang="ts">
	import { onLoad } from '@dcloudio/uni-app';
	import { ref } from 'vue';
	import { updateMemberApi, getMemberApi } from '@/api/member/profile/index.ts';
	import { useMemberStore } from '@/store/modules/member.ts'
	import type { MemberForm, Gender } from '@/api/member/profile/types.ts';
	import { formatDate } from '@/utils/curr_date.ts'
	// 获取屏幕边界到安全区域距离
	const { safeAreaInsets } = uni.getSystemInfoSync()
	const memberStore = useMemberStore();
	const formData = ref({} as MemberForm)

	/* 获取用户信息 */
	const getMember = async () => {
		const res = await getMemberApi(memberStore.user.userId);
		console.log(res)
		formData.value = res.data;
	}
	type resData ={
		statusCode: string | number;
		data:any
	}

	/* 修改头像 */
	const onAvatarChange = () => {
		//调用拍照/选择图片
		uni.chooseMedia({
			count: 1, //文件个数
			mediaType: ['image'], //文件类型
			success: (res) => {
				//本地路径
				const { tempFilePath } = res.tempFiles[0]
				//文件上传
				uni.uploadFile({
					url: 'http://43.136.168.33:8081/upload',//TODO 这个地址要配置，不能写死
					// url: 'http://localhost:8081/upload',
					name: 'file',
					filePath: tempFilePath,
					success: (res : resData) => {
						//获取到图片地址后，将图片路径字符串更新到后端avatar字段
						console.log(res)//结果data后面是字符串{statusCode: 200, data: "{↵	"code":200,↵	"data":null,↵	"msg":"https://jiu34…s.com/60b9416b-b5df-4947-a9fb-028f2d14f074.jpg"↵}", header: {…}, cookies: Array(0), errMsg: "uploadFile:ok"}
						if (res.statusCode === 200) {
							//将字符串转换成对象
							const new_avatar = JSON.parse(res.data).msg
							//1赋值给store缓存
							memberStore.userInfo!.avatar = new_avatar
							//赋值给后端
							formData.value.id = memberStore.user.userId
							formData.value.avatar = memberStore.userInfo!.avatar
						}

					}
				})
			}
		})
	}
	/* 修改性别 */
	const onGenderChange : UniHelper.RadioGroupOnChange = (ev) => {
		formData.value.gender = ev.detail.value as Gender;//ts断言
	}
	/* 修改生日 */
	const onBirthdayChange : UniHelper.DatePickerOnChange = (ev) => {
		formData.value.birthday = ev.detail.value
	}
	/* 修改城市 */
	const onLocationChange : UniHelper.RegionPickerOnChange = (ev) => {
		//ev.detail.value是数组，但后端需要的是字符串，所以用空格拼接转换成字符串
		formData.value.fullLocation = ev.detail.value.join(' ');
	}


	/* 保存修改数据 */
	const handleSubmit = async () => {
		console.log(formData.value)
		const res = await updateMemberApi(formData.value)
		if (res.code === 200) {
			uni.showToast({
				icon: 'none',
				title: '修改成功'
			})
			uni.switchTab({ url: '/pages/my/my' })
		}
	}
	onLoad(() => {
		getMember()
	})
</script>


<style lang="scss">
	page {
		background-color: #f4f4f4;
	}

	.viewport {
		display: flex;
		flex-direction: column;
		height: 100%;
		background-image: url(https://pcapi-xiaotuxian-front-devtest.itheima.net/miniapp/images/order_bg.png);
		background-size: auto 420rpx;
		background-repeat: no-repeat;
	}

	// 导航栏
	.navbar {
		position: relative;

		.title {
			height: 40px;
			display: flex;
			justify-content: center;
			align-items: center;
			font-size: 16px;
			font-weight: 500;
			color: #fff;
		}

		.back {
			position: absolute;
			height: 40px;
			width: 40px;
			left: 0;
			font-size: 20px;
			color: #fff;
			display: flex;
			justify-content: center;
			align-items: center;
		}
	}

	// 头像
	.avatar {
		text-align: center;
		width: 100%;
		height: 260rpx;
		display: flex;
		flex-direction: column;
		justify-content: center;
		align-items: center;

		.image {
			width: 160rpx;
			height: 160rpx;
			border-radius: 50%;
			background-color: #eee;
		}

		.text {
			display: block;
			padding-top: 20rpx;
			line-height: 1;
			font-size: 26rpx;
			color: #fff;
		}
	}

	// 表单
	.form {
		background-color: #f4f4f4;

		&-content {
			margin: 20rpx 20rpx 0;
			padding: 0 20rpx;
			border-radius: 10rpx;
			background-color: #fff;
		}

		&-item {
			display: flex;
			height: 96rpx;
			line-height: 46rpx;
			padding: 25rpx 10rpx;
			background-color: #fff;
			font-size: 28rpx;
			border-bottom: 1rpx solid #ddd;

			&:last-child {
				border: none;
			}

			.label {
				width: 180rpx;
				color: #333;
			}

			.account {
				color: #666;
			}

			.input {
				flex: 1;
				display: block;
				height: 46rpx;
			}

			.radio {
				margin-right: 20rpx;
			}

			.picker {
				flex: 1;
			}

			.placeholder {
				color: #808080;
			}
		}

		&-button {
			height: 80rpx;
			text-align: center;
			line-height: 80rpx;
			margin: 30rpx 20rpx;
			color: #fff;
			border-radius: 80rpx;
			font-size: 30rpx;
			background-color: #27ba9b;
		}
	}
</style>